#堆的基础知识
#堆是一种特殊的树形数据结构，每个节点都有一个值，且每个节点的值都大于等于（或小于等于）其子节点的值。
#堆有两种类型：最大堆和最小堆。最大堆的每个节点都大于等于其子节点的值，最小堆的每个节点都小于等于其子节点的值。
#堆的实现方式有两种：使用数组和使用链表。使用数组时，堆的根节点存储在数组的第一个位置，其余节点存储在数组的后续位置。使用链表时，堆的根节点存储在链表的第一个位置，其余节点存储在链表的后续位置。
#堆的常见操作：
#1.插入元素：将元素插入到堆的末尾，然后向上调整堆。
#2.删除元素：将堆的根节点删除，然后将堆的最后一个元素移动到根节点，然后向下调整堆。
#3.获取堆的根节点：返回堆的根节点的值。
#4.获取堆的大小：返回堆的节点数。
#5.获取堆的空闲空间：返回堆的空闲空间。


#应用：堆排序，优先队列等
# 构造堆的过程，又称之为堆化，分为自顶向下堆化和自底向上堆化
# 自顶向下堆化：从最后一个非叶子节点开始，向上调整堆。
# 自底向上堆化：从根节点开始，向下调整堆。
# 堆化的时间复杂度为O(n)，因为每个节点最多被调整一次。
# 堆化的时间复杂度为O(n)，因为每个节点最多被调整一次。



